package cn.pro.xxh;

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Method;

public class XieXiaoHui {

    public static void main(String[] args) throws Exception{
        // randomNumeric：随机生成指定位数的数字
        // randomAlphabetic：随机生成指定位数的字母
        // String s = RandomStringUtils.randomAlphabetic(6);
        // System.out.println(s);

        // ===============================================
        // 面向对象的思想
        // ===============================================
        // 创建 User 类的实例
        // >>> 使用 new 关键字调用 User 类的构造器得到实例 u
        User u = new User();
        // >>> 使用实例 u 的 setName 方法为 name 属性赋值为 Timor
        u.setName("Timor");
        // >>> 使用实例 u 的 getName 方法获取 name 属性的值
        System.out.println(u.getName());
        // ===============================================
        // 面向对象的思想
        // ===============================================

        // 快捷键：Ctrl + Alt + V 自动生成函数返回值的对象在等号左边

        // 类的完整限定名 = 类的包名 + 类名
        // 通过类的完整限定名来加载某个类对象
        // 得到的这个 UU 相当于 User 类
        Class<?> UU = Class.forName("cn.tedu.wyl.User");
        // 通过 UU（类对象） 的 newInstance 方法得到 User 类的实例
        // >>> 相当于面向对象中的  User u = new User();
        Object o = UU.newInstance();

        // 通过 UU（类对象） 的 getMethod 方法查找指定名称的方法
        Method setName = UU.getMethod("setName", String.class);
        // >>> 使用实例 o 来调用 setName 方法并为 o 的 name 属性赋值
        // >>> 相当于面向对象中的  u.setName("Timor");
        setName.invoke(o, "Jenkins");

        // 通过 UU（类对象） 的 getMethod 方法查找名称为 getName 的方法
        Method getName = UU.getMethod("getName");
        // >>> 使用实例 o 来调用 getName 方法来获取 o 的 name 属性的值
        Object result = getName.invoke(o);

        System.out.println(result);
    }
}